var http = require("http")
var Promise = require("bluebird")
var cheerio = require("cheerio")
var colors = require("colors")
var baseUrl = 'http://www.imooc.com/learn/'
var url = "http://www.imooc.com/learn/348"
var videoIds = [348,259,197,134,75]
 
function filterChapters(html){
	var $ = cheerio.load(html)
	var chapters = $(".chapter")
	// courseData = {
	// 	title:title,
	// 	number:number,
	// 	videos:[{
	// 		chapterTitle:"",
	// 		videos:[{
	// 		  title:"",
	// 		  id:""
	// 		}]
	// 	}]
	// }
	var title = $('#main .course-infos h2').text().trim();
	console.log(("title " + title +  "\n").yellow)
	var number = $('.js-learn-num').eq(0).text()

	var courseData = {
		title:title,
		number:number,
		videos:[]
	}

	chapters.each(function(){
		var chapter = $(this)
		var chapterTitle = chapter.find("strong").nodeValue
		var videos = chapter.find(".video").children("li")
		var chapterData = {
			chapterTitle : chapterTitle,
			videos:[]
		}
		// 对象的遍历？  each()jq中针对jq对象
		videos.each(function(item){
			var video = $(this).find(".J-media-item")
			var videoTitle = video.text()
			var id = video.attr("href").split("video/")[1]
			chapterData.videos.push({
				title:videoTitle,
				id:id
			})
		})
		courseData.videos.push(chapterData)

	})
	return courseData
}

// 把处理好的数组，去按照我们想要的内容打印出来。
function printCourseInfo(coursesData){
	coursesData.forEach(function(courseData){
		console.log(courseData.number + " 人学过" + courseData.title + "\n")
	})
	var a = coursesData.title
	console.log(a +"1111111111111")
	// 数组里面的forEach的方法  遍历. 是js中的方法针对数组
  coursesData.forEach(function(courseData){
  	console.log(("#z#s#" + courseData.title.replace(/\s+/g,"") + "\n").red)

  	courseData.videos.forEach(function(item){
	  	var chapterTitle =  item.chapterTitle
	  	console.log("123" + chapterTitle + "\n") 
	  	// 遍历videos。它也是数组
	  	item.videos.forEach(function(video){
	  		console.log(' 【 ' + video.id.replace(/\s+/g,"") +'】 ' + video.title.replace(/\s+/g,"")+  "\n")
	  	  // console.log(' 【 ' + video.id +'】 ' + video.title + '\n')

	  	})
	  })


  })
}

var fetchCourseArray = []

//最先运行，解析数组，搜索每个id，链接为。url + id
videoIds.forEach(function(id){
  fetchCourseArray.push(getPageAsync(baseUrl + id))
})
//开始爬取内容。(通过url获取内容)
function getPageAsync(url){
	return new Promise(function(resolve,reject){
		console.log('正在爬取' + url)
		http.get(url,function(res){
			var html = ""
			res.on("data",function(data){
				html += data
			})
			res.on("end",function(){
				// 把html传递出去，then函数的运行，开始处理html的内容。
				resolve(html)
			})
		}).on("error",function(e){
			reject(e)
			console.log("error")
		})
	})
}



Promise
	.all(fetchCourseArray)
	.then(function(pages){
setTimeout(function() {
		var coursesData = []
		// pages是几个id内容的数组。【】，
		pages.forEach(function(html){
			// 把每个html的内容处理成我们想要的对象。
			var courses = filterChapters(html)
			// 把每个我们想要的内容对象添加到数组里面
			coursesData.push(courses)
		})
		// 按照number大小的顺序排列。
		coursesData.sort(function(a,b){
			return a.number < b.number
		})
		// 把对象集合数组传，整理成我么想要的格式的时候，开始取打印。
		printCourseInfo(coursesData)
}, 1000)
	})




































